import java.util.LinkedList;

public class LCP283 {
    public static void main(String[] args) {
        int[] nums1 = {0,1,0,3,12};
        int[] nums2 = {0};
        moveZeroes(nums1);
        moveZeroes(nums2);
    }

    /**
     * 给定一个数组 nums，编写一个函数将所有 0 移动到数组的末尾，同时保持非零元素的相对顺序。
     * 请注意 ，必须在不复制数组的情况下原地对数组进行操作。
     * 考虑用链表、头尾指针——头插法、尾插法
     */
    public void moveZeroes1(int[] nums) {
        LinkedList<Integer> list = new LinkedList<>();
        for (int num : nums) {
            if (num == 0) {
                list.addFirst(num);
            }
            else {
                list.addLast(num);
            }
        }
        //现在是 0 0 1 3 2 12 --> 1 3 2 12 0 0
        for (Integer num : list) {
            if (num != 0) {
//                list.
            }
        }
    }

    public static void moveZeroes(int[] nums) {
        int n = nums.length, left = 0, right = 0;
        while (right < n) {
            if (nums[right] != 0) {
                swap(nums, left, right);
                left++;
            }
            right++;
        }
        for (int num : nums) {
            System.out.print(num + " ");
        }
    }

    public static void swap(int[] nums, int left, int right) {
        int temp = nums[left];
        nums[left] = nums[right];
        nums[right] = temp;
    }

}
